package lambda;


import java.io.File;
import java.io.FileFilter;

/**
 * JDK8之后推出了一个新特性：lambda表达式
 * Lambda表达式可以让java编写面向函数式编程
 * 给我们最直观的感受是可以用更精简的语法定义匿名内部类
 * 语法：
 * (参数列表)->{
 *     方法体
 * }
 * 注意：
 * 使用lambda表达式创建匿名内部类时实现的接口中只能有一个抽象方法！
 */
public class LambdaDemo {
    public static void main(String[] args) {
       //匿名内部类风格
        FileFilter file = new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return false;
            }
        };
        //lambda表达式写法(省去了接口名和方法名)
        FileFilter flie1 = (File f)->{
          return f.getName().matches(".*a.*");
        };

        //方法参数列表中的参数类型可以不写，如果只有一个参数，那么"()"可以忽略不写
        FileFilter file2 = f->{
            return f.getName().startsWith(".");
        };

        //如果方法体中只有一句代码，那么方法体"{}"可以不写，若这句话有
        //return关键字，那么return也要一同忽略。
        FileFilter file3 = f->f.getName().startsWith(".");

        //获取当前目录下以"."开始的子项
        File dir = new File(".");
        File[] subs = dir.listFiles(f->f.getName().startsWith("."));
        System.out.println(subs.length);
        for (int i = 0; i < subs.length; i++) {
            System.out.println(subs[i].getName());
        }
    }
}
